package com.ftg.learn.bus.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ftg.learn.bus.VO.UserRidVo;
import com.ftg.learn.bus.VO.UserRoleNameVo;
import com.ftg.learn.bus.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ftg.learn.util.ResEntity;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 人员表 服务类
 * </p>
 *
 * @author lalala
 * @since 2022-03-07
 */
public interface IUserService extends IService<User> {

    /**
     * 查询全部人员，及其角色
     *
     * @return
     */
    List<Map<String, Object>> showAddRole();

    List<Map<String, Object>> queryAllUsers();


    /**
     * 分页查询人员信息及其角色。
     * @param pagination
     * @return
     */
    List<UserRoleNameVo> showUserAndRoleName(Page<UserRoleNameVo> pagination);

    /**
     * 按名字模糊查询分页功能带角色。
     * @param pagination
     * @return
     */
    List<UserRoleNameVo> pageUserAndRoleNameByName(Page<UserRoleNameVo> pagination,String uname);

    /**
     * 人员登录功能
     *
     * @param account
     * @param password
     * @param request
     * @return
     */
    ResEntity logIn(String account, String password, HttpServletRequest request, HttpServletResponse response);

    /**
     * 查某个人具有的角色
     *
     * @param uid
     * @return
     */
    List<Map<String, Object>> showRoleForUserId(Long uid);


    /**
     * 根据用户的名字进行模糊查询
     * @param name
     * @return
     */
    List<User> showByName(String name);


    /**
     * 人员添加功能
     * @param e
     * @return
     */
    boolean insertUser(User e);

    /**
     * 人员修改功能
     * @param e
     * @return
     */
    boolean updateUser(User e);

    /**
     * 对操作的用户删除角色并且添加新角色 (只操作一个角色)
     * @param rid
     * @param uid
     * @return
     */
    boolean roleGroupOne(Long rid, Long uid);

    /**
     * 对操作的用户删除角色并且添加新角色 (操作多个角色)
     *
     * @param rid
     * @param uid
     * @return
     */
    boolean roleGroup(List<Long> rid, Long uid);

    /**
     * 添加人员，并同时添加其角色。
     *
     * @param user
     * @return
     */
    boolean insertAddRole(UserRidVo user);

    /**
     * 删除用户，及其角色
     *
     * @param uid
     * @return
     */
    boolean deleteAndRole(Long uid);


    /**
     * 更改user表的修改时间为进行当前修改操作的时间
     * @param uid
     * @return
     */
    boolean updateLocalTime(Long uid);

    /**
     * 多选删除用户并且同时删除其用户-角色表里的数据。
     * @param ids
     * @return
     */
    boolean deleteIdsAndRole( List<Serializable> ids);

    /**
     * 重置当前用户密码为88888888
     * @param uid
     * @return
     */
    boolean resetPassword(int uid);

    /**
     * 获取当前所有的角色名称
     * @return
     */
    List<Map<String,Object>> showAllRname();
}
